<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button id="btn">测试回调函数</button>
		1.你定义的<br />
		2.你没有调<br />
		3.它执行了<br />
		<br />
		1.DOM事件回调函数<br />
		2.定时器回调函数<br />
		3.AJAX请求回调函数<br />
		4.生命周期回调函数<br />
		<script>
			//							函数
			//函数定义
			function fn() { //函数声明
				console.log('nigger')
			}
			var fn2 = function() { //表达式
				console.log('slaughter nigger')
				this.x='black nigger'
			}

			//call&apply
			var obj = {}
			fn2.call(obj)
			// 改变this的指向，第一个参数为你要传入的对象，
			// 传入后函数的this就指向了这个对象,后面的参数为你为函数传递的参数值
			console.log(obj.x);

			// 立即调用函数表达式(Immediately Invoked Function Expression)  IIFE
			// let r = (function iife() {
			//     let name = '黑人'
			//     return 3
			// })()
			// // 当函数变成立即执行的函数表达式时，表达式中的变量不能从外部访问。
			// // name = '白人'
			// // 将 IIFE 分配给一个变量，不是存储 IIFE 本身，而是存储 IIFE 执行后返回的结果。
			// console.log(r)

				//模拟模块
			(function () {
				var a=4396
				function Fuck(){
					console.log(++a)
				}
				window.$=function(){
					console.log("$执行")
					return{
						result:a
					}
				}
			})()

			console.log($().result)



			//回 调 函 数
			document.getElementById('btn').onclick = function() { //DOM事件回调函数
				alert(this.innerHTML)
			}

			setTimeout(function() { //定时器回调函数
				console.log("死了妈，瓦莉拉")
			}, 2000)


			function nigger() {
				let s = 'http://192.168.156.128//group1/M00/00/00/hOhf-V9ysNOASTKJAAY-dvHy3wY938.jpg'
				let strings = s.split('//');
				console.log(strings[2].substring(10))
			}
			nigger()
		</script>
	</body>
</html>
